function isIterable(obj) {
  if (obj === null || obj === undefined) {
    return false;
  }

  // 检查是否存在Symbol.iterator属性
  try {
    if (Symbol.iterator in obj) {
      try {
        const iterator = obj[Symbol.iterator]();
        // 检查iterator是否为对象
        if (typeof iterator !== "object") {
          return false;
        }
        // 检查next方法
        if (typeof iterator.next !== "function") {
          return false;
        }
        // 检查next方法的返回值
        const firstItem = iterator.next();
        return "value" in firstItem && "done" in firstItem;
      } catch (e) {
        return false;
      }
    }

    return false;
  } catch (e) {
    return false;
  }
}

// 测试不同类型的值
const testCases = [
  [], // 数组
  "hello", // 字符串
  new Map(), // Map
  new Set(), // Set
  {}, // 普通对象
  123, // 数字
  { a: 1, b: 2 }, // 普通对象
  null, // null
  undefined, // undefined
  // 自定义迭代器
  {
    [Symbol.iterator]() {
      return {
        next() {
          return { value: 1, done: true };
        },
      };
    },
  },
];

// 测试每种类型
testCases.forEach((item) => {
  console.log(
    `${Object.prototype.toString.call(item)} 是否可迭代:`,
    isIterable(item)
  );
});

// 可遍历对象示例
const enumerableObj = {
  a: 1,
  b: 2,
  c: 3,
};

// 使用 for...in
// for (const key in enumerableObj) {
//   console.log(key); // 输出 "a", "b", "c"
//   console.log(enumerableObj[key]); // 输出 1, 2, 3
// }









// ... existing code ...

const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);

// 基本操作
console.log(map.get("a"));     // 获取值: 1
console.log(map.has("b"));     // 检查键是否存在: true
console.log(map.size);         // 获取Map大小: 3

// 删除操作
map.delete("b");               // 删除单个键值对
console.log(map.has("b"));     // false

// 遍历操作
// 遍历所有的键值对
map.forEach((value, key) => {
    console.log(`${key} = ${value}`);
});

// 使用for...of遍历
for (let [key, value] of map) {
    console.log(`${key} = ${value}`);
}

// 获取所有的键或值
console.log([...map.keys()]);   // ['a', 'c']
console.log([...map.values()]); // [1, 3]

// 转换为数组
console.log([...map]);         // [['a', 1], ['c', 3]]

// 清空Map
map.clear();
console.log(map.size);         // 0

// Map的链式操作
map.set("x", 10)
   .set("y", 20)
   .set("z", 30);

// 从对象创建Map
const obj = { foo: "bar", baz: "qux" };
console.log(Object.entries(obj))
const mapFromObj = new Map(Object.entries(obj));
console.log(mapFromObj);